package com.herench.bs.transfer;

import org.apache.cxf.endpoint.Client;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.HashMap;
import java.util.Map;

/**
 * 修改住院患者基本信息
 *
 * @author liuxiaohui
 * @date 2019/3/26
 */
public class UpdateInpPatientTransfer extends AbstractTransfer {
    public UpdateInpPatientTransfer(String method, Client client, String messageMethod) {
        super(method, client, messageMethod);
    }

    /**
     * 发送：微信前端JSON数据转换为HIS用的XML数据（微信前端==》HIS）
     * @param params
     * @return
     * @throws Exception
     */
    @Override
    public String toInvokeMessage(Map<String, Object> params) throws Exception {
        // 身份证号
        String idNo = (String) params.get("idNo");
        // 患者ID
        String patientId = (String) params.get("patientId");
        // 姓名
        String name = (String) params.get("name");
        // 性别，中文（男、女）
        String sex = (String) params.get("sex");
        // 出生日期
        String dateOfBirth = (String) params.get("dateOfBirth");
        // 出生地
        String birthPlace = (String) params.get("birthPlace");
        // 户口地址
        String mailingAddress = (String) params.get("mailingAddress");
        // 现住址
        String currentAddress = (String) params.get("currentAddress");
        // 邮政编码
        String zipCode = (String) params.get("zipCode");
        // 籍贯
        String nativePlace = (String) params.get("nativePlace");
        // 联系电话
        String phoneNumberHome = (String) params.get("phoneNumberHome");
        // 国籍
        String citizenship = (String) params.get("citizenship");
        // 民族
        String nation = (String) params.get("nation");
        // 医保卡号
        String insurCardNo = (String) params.get("insurCardNo");
        // 工作单位
        String serviceAgency = (String) params.get("serviceAgency");
        // 联系人姓名
        String nextOfKin = (String) params.get("nextOfKin");
        // 与联系人关系
        String relationship = (String) params.get("relationship");
        // 联系人电话
        String nextOfKinPhone = (String) params.get("nextOfKinPhone");
        // 联系人地址
        String nextOfKinAddr = (String) params.get("nextOfKinAddr");
        // 联系人邮政编码
        String nextOfKinZipCode = (String) params.get("nextOfKinZipCode");
        // 婚姻状况
        String maritalStatus = (String) params.get("maritalStatus");


        // 交易ID：his的方法名
        Document document = getTplDoc(getMethod());

        // 将各个参数设值（入参的树状结构：父==》子）
        Element dataRow = document.getRootElement().element("CommitData").addElement("Data").addElement("DataRow");
        // 身份证号
        dataRow.addAttribute("ID_NO", idNo);
        // 患者ID
        dataRow.addAttribute("PATIENT_ID", patientId);
        // 姓名
        dataRow.addAttribute("NAME", name);
        // 性别，中文（男、女）
        dataRow.addAttribute("SEX", sex);
        // 出生日期
        dataRow.addAttribute("DATE_OF_BIRTH", dateOfBirth);
        // 出生地
        dataRow.addAttribute("BIRTH_PLACE", birthPlace);
        // 户口地址
        dataRow.addAttribute("MAILING_ADDRESS", mailingAddress);
        // 现住址
        dataRow.addAttribute("CURRENT_ADDRESS", currentAddress);
        // 邮政编码
        dataRow.addAttribute("ZIP_CODE", zipCode);
        // 籍贯
        dataRow.addAttribute("NATIVE_PLACE", nativePlace);
        // 联系电话
        dataRow.addAttribute("PHONE_NUMBER_HOME", phoneNumberHome);
        // 国籍
        dataRow.addAttribute("CITIZENSHIP", citizenship);
        // 民族
        dataRow.addAttribute("NATION", nation);
        // 医保卡号
        dataRow.addAttribute("INSUR_CARD_NO", insurCardNo);
        // 工作单位
        dataRow.addAttribute("SERVICE_AGENCY", serviceAgency);
        // 联系人姓名
        dataRow.addAttribute("NEXT_OF_KIN", nextOfKin);
        // 与联系人关系
        dataRow.addAttribute("RELATIONSHIP", relationship);
        // 联系人电话
        dataRow.addAttribute("NEXT_OF_KIN_PHONE", nextOfKinPhone);
        // 联系人地址
        dataRow.addAttribute("NEXT_OF_KIN_ADDR", nextOfKinAddr);
        // 联系人邮政编码
        dataRow.addAttribute("NEXT_OF_KIN_ZIP_CODE", nextOfKinZipCode);
        // 婚姻状况
        dataRow.addAttribute("MARITAL_STATUS", maritalStatus);


        return document.asXML();
    }

    /**
     * 接收：HIS返回的XML数据并转换为JSON（HIS==》微信前端）
     * @param resMsg
     * @return
     * @throws Exception
     */
    @Override
    public Map<String, Object> toResultMessage(String resMsg) throws Exception {
        Map<String, Object> resMap = new HashMap<>(16);
        Document document = DocumentHelper.parseText(resMsg);

        Element resultInfo = document.getRootElement().element("Result").element("Info");
        String executeStatus = resultInfo.attributeValue("EXECUTE_STATUS");
        String executeMessage = resultInfo.attributeValue("EXECUTE_MESSAGE");

        if (Dialect.getSuccessfulState().equals(executeStatus)) {
            // 返回Code
            resMap.put("code", executeStatus);
            // 返回信息
            resMap.put("message", "成功！");
        } else {
            resMap.put("code", executeStatus);
            resMap.put("message", executeMessage);
        }
        return resMap;
    }
}
